<template>
  <view class="payment-demo">
    <button @click="testSandboxPayment">测试沙箱支付</button>
  </view>
</template>

<script>
import { getSandboxSignKey, requestPayment } from '@/api/payment.js'

export default {
  data() {
    return {
      // 微信支付商户号
      mchId: 'your_mch_id',
      // 商户API密钥
      apiKey: 'your_api_key'
    }
  },
  
  methods: {
    async testSandboxPayment() {
      try {
        // 1. 获取沙箱签名密钥
        const sandboxSignKey = await getSandboxSignKey(this.mchId, this.apiKey)
        console.log('沙箱签名密钥:', sandboxSignKey)
        
        // 2. 构造支付参数
        const paymentData = {
          appid: 'your_app_id',
          mch_id: this.mchId,
          nonce_str: Math.random().toString(36).substr(2, 15),
          body: '测试商品',
          out_trade_no: 'test' + Date.now(),
          total_fee: 1, // 1分钱
          spbill_create_ip: '127.0.0.1',
          notify_url: 'https://your-domain.com/notify',
          trade_type: 'JSAPI',
          openid: 'your_openid'
        }
        
        // 3. 使用沙箱签名密钥重新生成签名
        // 注意：这里需要使用sandboxSignKey而不是原始API密钥
        // 在实际实现中，需要修改generateSignature函数来接受sandboxSignKey参数
        // 这里为了简化演示，我们直接在paymentData中添加sign字段
        
        // 4. 发起沙箱支付请求
        const result = await requestPayment(paymentData, true)
        console.log('支付结果:', result)
        
        // 5. 处理支付结果
        if (result.return_code === 'SUCCESS' && result.result_code === 'SUCCESS') {
          uni.showToast({
            title: '支付请求成功',
            icon: 'success'
          })
        } else {
          uni.showToast({
            title: '支付请求失败',
            icon: 'none'
          })
        }
      } catch (error) {
        console.error('支付测试失败:', error)
        uni.showToast({
          title: '支付测试失败: ' + error.message,
          icon: 'none'
        })
      }
    }
  }
}
</script>

<style scoped>
.payment-demo {
  padding: 20px;
}

button {
  width: 100%;
  height: 40px;
  background-color: #07c160;
  color: white;
  border: none;
  border-radius: 4px;
  font-size: 16px;
}
</style>